package com.finance.iso.iso8583.jpos.util; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import javax.crypto.BadPaddingException; import javax.crypto.Cipher; import javax.crypto.IllegalBlockSizeException; import javax.crypto.NoSuchPaddingException; import javax.crypto.spec.SecretKeySpec; import org.bouncycastle.crypto.CryptoException; public class SecurityUtils { public static byte calculateLRC(byte[] data) { byte checksum = 0; for (int i = 0; i < data.length; i++) { checksum = (byte) ((checksum + data[i]) & 0xFF); } checksum = (byte) (((checksum ^ 0xFF) + 1) & 0xFF); return checksum; } public static byte[] encryptSymmetric(byte[] key, byte[] dataToEncrypt) throws CryptoException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { Cipher c = Cipher.getInstance("AES"); MessageDigest md = MessageDigest.getInstance("MD5"); //based on the strength of the key, change this algorithm. //128 bits - MD5 256 bits - SHA-256 //512 bits - SHA-512. Also, please include JCE to use 256 or 512 bits keys. byte[] digetstKey = md.digest(key); SecretKeySpec k = new SecretKeySpec(digetstKey, "AES"); c.init(Cipher.ENCRYPT_MODE, k); byte[] encryptedData = c.doFinal(dataToEncrypt); return encryptedData; } public static byte[] decryptSymmetric(byte[] key, byte[] dataToDecrypt) throws CryptoException, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException { Cipher c = Cipher.getInstance("AES"); MessageDigest md = MessageDigest.getInstance("MD5"); //based on the strength of the key, change this algorithm. //128 bits - MD5 256 bits - SHA-256 //512 bits - SHA-512. Also, please include JCE to use 256 or 512 bits keys. byte[] digetstKey = md.digest(key); SecretKeySpec k = new SecretKeySpec(digetstKey, "AES"); c.init(Cipher.DECRYPT_MODE, k); byte[] decryptedData = c.doFinal(dataToDecrypt); return decryptedData; } }